import cv2  
import numpy as np  
import os  
  
# 假设txt文件和图片文件在同一个目录下，且图片文件也是以.jpg结尾  
# 假设txt文件的每一行格式都是：图片名 x1 y1 x2 y2 x3 y3 x4 y4 conf  
# conf值在这个脚本中不会被使用，但你可以根据需要修改脚本以使用它  
  
# 输入txt文件路径  
input_txt_path = 'commit.txt'  
# 输出图片文件夹路径  
output_dir = 'output'  
  
# 确保输出文件夹存在  
if not os.path.exists(output_dir):  
    os.makedirs(output_dir)  

last_img_name=None
# 读取txt文件  
with open(input_txt_path, 'r') as file:  
    lines = file.readlines()  
  
for line in lines:  
    parts = line.strip().split()  
    img_name = parts[0]  

    if not img_name==last_img_name:
        # 读取图片  
        img_path = os.path.join("/home/heyujun/WorkSpace/Laboratory/yolov8-SAR/datasets/SAR/test/JPEGImages", img_name)  
        img = cv2.imread(img_path)  
        if img is None:  
            print(f"无法读取图片：{img_path}")  
            continue  
    # 提取坐标  
    coords = np.array(parts[1:-1]).reshape(-1, 2).astype(int)  
    # 坐标应该是四个点，所以我们需要确保它是4x2的形状  
    assert coords.shape == (4, 2), "坐标数量不正确，应该是4个点的坐标"  
    
  
    # 绘制边界框（多边形）  
    # 注意：polylines的points参数需要是32位整数，并且需要是形状为(n, 1, 2)的数组  
    # 第一个维度是点的数量，第二个维度是点的集合（这里只有一个集合），第三个维度是x和y坐标  
    points = np.int32(coords).reshape((-1, 1, 2))  
    cv2.polylines(img, [points], isClosed=True, color=(0, 255, 0), thickness=2)  
    if not img_name==last_img_name:
        # 保存图片  
        output_path = os.path.join(output_dir, img_name)  
        cv2.imwrite(output_path, img)  
    
        print(f"已保存图片：{output_path}")
    last_img_name=img_name